package com.gnerv.cms.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gnerv.cms.dto.*;

import java.util.List;

/**
 * 基础平台-用户 service 接口
 *
 * @author zhang
 * @date 2019/11/30
 **/
public interface IUserService {

    /**
     * 保存 用户
     *
     * @param userSaveDTO
     * @return
     */
    boolean saveUser(UserSaveDTO userSaveDTO);

    /**
     * 创建 用户
     *
     * @param userSaveDTO
     * @return
     */
    boolean createUser(UserSaveDTO userSaveDTO);

    /**
     * 保存 用户
     *
     * @param userSaveDTO
     * @return
     */
    boolean updateUser(UserSaveDTO userSaveDTO);

    /**
     * 根据用户id 查询
     *
     * @param userId
     * @return
     */
    UserDTO selectUser(String userId);

    /**
     * 根据用户id 删除
     *
     * @param userId
     * @return
     */
    boolean deleteUser(String userId);

    /**
     * 用户分页条件查询
     *
     * @param current
     * @param size
     * @param userSearchDTO
     * @return
     */
    Page<UserDTO> listUser(Integer current, Integer size, UserSearchDTO userSearchDTO);

    /**
     * 用户 绑定 角色
     *
     * @param roleIds
     * @param userId
     * @return
     */
    boolean bindUserRole(String userId, List<String> roleIds);


    /**
     * 用户 解绑 角色
     *
     * @param userId
     * @return
     */
    boolean unBindUserRole(String userId);

    /**
     * 根据 组织机构 id 查询用户集合
     *
     * @param orgId
     * @return
     */
    List<UserDTO> listUsersByOrgId(String orgId);

    /**
     * 更新密码
     *
     * @param userId
     * @param passwordDTO
     * @return
     */
    boolean updatePassword(String userId, UpdatePasswordDTO passwordDTO);

    /**
     * 重置密码
     *
     * @param userId
     * @param passwordType
     * @param password
     * @return
     */
    boolean resetPassword(String userId, String passwordType, String password);

    List<UserDTO> listUsersByRoleId(String roleId);

    boolean updateUserStatus(String userId, Integer status);

    PersonalDTO selectPersonal(String userId);
}
